home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / stv.lha / STV / st_v / util / STVUTIL4.ZIP / NOECHO.ST < prev    next >
Text File  |  1993-02-07  |  4KB  |  107 lines

  1. !Copyright 1990 Digitalk, Inc.  May be used freely under the same
  2. terms and conditions as contained in the Digitalk License Statement.
  3. This code is provided on an as-is basis, and all warrenties, either
  4. express or implied, are disclaimed.
  5. ======================================================="!
  6.  
  7. "This is for Smalltalk/V and Smalltalk/V 286"!
  8.  
  9. NoEcho := false !
  10.  
  11. StringModel subclass: #NoEchoStringModel
  12.   instanceVariableNames: ''
  13.   classVariableNames: ''
  14.   poolDictionaries: '' !
  15.  
  16. !  NoEchoStringModel  methods !
  17. display: aRectangle
  18.         "Display the text contained in aRectangle."
  19.     | sourceY dest lastY sourceX minY fontSize dummyChar |
  20.     dummyChar := $(.
  21.     fontSize := charScanner font charSize.
  22.     sourceX := aRectangle origin x.
  23.     sourceY := aRectangle origin y.
  24.     lastY := aRectangle corner y.
  25.     dest := aRectangle origin - lastChild topCorner *
  26.         charScanner font charSize.
  27.     lines size >= sourceY ifTrue: [
  28.         (sourceY = lastY) ifTrue: [ "single line"
  29.             charScanner
  30.                 display: ((String new: (lines at: sourceY) size) atAllPut: dummyChar)
  31.                 from: sourceX
  32.                 to: aRectangle corner x
  33.                 at: dest.
  34.             ^self].
  35.         "display first line for multi lines"
  36.             charScanner
  37.                 display: ((String new: (lines at: sourceY) size) atAllPut: dummyChar)
  38.                 from: sourceX
  39.                 at: dest].
  40.     minY := lastY min: lines size.
  41.     sourceY + 1 to: minY do: [ :i |
  42.         dest := 0 @ (dest y + fontSize y).
  43.         charScanner
  44.             display: ((String new: (lines at: i) size) atAllPut: dummyChar)
  45.             from: lastChild topCorner x
  46.             at: dest].
  47.     minY < lastY
  48.         ifTrue: [
  49.             minY := minY max: sourceY - 1. "for
  50.                 case sourceY > minY"
  51.             charScanner
  52.                 blankRestFrom:
  53.                 (minY - lastChild topCorner y + 1
  54.                 * fontSize y)] !  !
  55.  
  56. ! Prompter methods !
  57.  
  58. prompt: questionString default: answerString
  59.         "Private - Initialize a Prompter window
  60.          and give it control."
  61.     | topPane promptBox tempOffset offset cursor |
  62.     cursor := Cursor.
  63.     CursorManager normal change.
  64.     reply := answerString.
  65.     exitBlock := [
  66.         cursor change.
  67.         ^reply].
  68.     topPane := TopPane new
  69.         label: questionString;
  70.         leftIcons: Array new;
  71.         rightIcons: Array new;
  72.         backColor: 14;
  73.         minimumSize:
  74.             ((questionString size max: reply size) + 4
  75.                 * (LabelFont width max: TextFont width)
  76.              min: 60 * SysFontWidth)
  77.             @ (LabelFont height + TextFont height + 10);
  78.         yourself.
  79.     topPane addSubpane:
  80.         (replyPane := TextPane new
  81.             model: self;
  82.             menu: #menu;
  83.             dispatcher: PromptEditor new;
  84.             name: #reply;
  85.             change: #acceptReply:from:;
  86.             framingBlock: [:box|
  87.                 box origin corner: box corner]).
  88.     NoEcho ifTrue: [replyPane textHolder: (NoEchoStringModel for: '')].
  89.     offset := Cursor offset.
  90.     promptBox :=
  91.         Rectangle
  92.             origin: offset
  93.             extent: topPane minimumSize.
  94.     tempOffset := (Display extent - promptBox extent)
  95.         min: (offset - (4 @ (SysFontHeight * 2)) max: 0 @ 0).
  96.     promptBox moveTo: tempOffset.
  97.     "topPane unzoom."
  98.     hiddenArea := Display compatibleForm fromDisplay: promptBox.
  99.     hiddenArea offset: tempOffset.
  100.     topPane dispatcher openIn: promptBox.
  101.     replyPane
  102.         selectAtEnd;
  103.         homeCursor.
  104.     topPane activateWindow.
  105.     [topPane dispatcher active] whileTrue: [
  106.         replyPane dispatcher processInput] !  !
  107.